Skip to content

Add Buck CLI override for feature flag defaults#56507

Closed
motiz88 wants to merge 1 commit into
react:mainfrom
motiz88:export-D101484355
Closed

Add Buck CLI override for feature flag defaults#56507
motiz88 wants to merge 1 commit into
react:mainfrom
motiz88:export-D101484355

Conversation

@motiz88

@motiz88 motiz88 commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

Summary:
Adds a mechanism to override React Native feature flag default values via a Buck command line argument, without modifying source files.

A genrule in the featureflags BUCK target always interposes on ReactNativeFeatureFlagsDefaults.h before compilation. When react_native.feature_flag_defaults is set to a JSON object via --config, a Python script rewrites the return values in the matching method bodies. When unset, the header passes through unmodified.

The Python script matches each override against the full method signature shape (<returnType> <flagName>() override { ... return <value>; }) with lenient whitespace, and fails the build if any requested flag name is not found in the header.

Usage:

buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true}' //target
buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true,"preparedTextCacheSize":500}' //target

This modifies defaults only — app-level providers still take priority.

Changelog: [Internal]

Reviewed By: robhogan

Differential Revision: D101484355

Summary:
Adds a mechanism to override React Native feature flag default values via a Buck command line argument, without modifying source files.

A `genrule` in the featureflags BUCK target always interposes on `ReactNativeFeatureFlagsDefaults.h` before compilation. When `react_native.feature_flag_defaults` is set to a JSON object via `--config`, a Python script rewrites the return values in the matching method bodies. When unset, the header passes through unmodified.

The Python script matches each override against the full method signature shape (`<returnType> <flagName>() override { ... return <value>; }`) with lenient whitespace, and fails the build if any requested flag name is not found in the header.

Usage:
```
buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true}' //target
buck2 build --config 'react_native.feature_flag_defaults={"enableViewCulling":true,"preparedTextCacheSize":500}' //target
```

This modifies defaults only — app-level providers still take priority.

Changelog: [Internal]

Reviewed By: robhogan

Differential Revision: D101484355
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Apr 20, 2026
@react-native-bot

Copy link
Copy Markdown
Collaborator

Closing as this has been merged in fed907b

@react-native-bot react-native-bot added the Merged This PR has been merged. label Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported Merged This PR has been merged. meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants